1、树的子结构；
重要一点，就是每个节点都要考虑到
class Solution {
public:
    bool _HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        if(pRoot1==nullptr&&pRoot2==nullptr)
            return true;
        if(pRoot1==nullptr)
            return false;
        if(pRoot2==nullptr)
            return true;
        if(pRoot1->val!=pRoot2->val)
            return false;
        return _HasSubtree(pRoot1->left,pRoot2->left)&&_HasSubtree(pRoot1->right,pRoot2->right);
    }
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
        if(!pRoot1&&!pRoot2)
            return false;
        else if(!pRoot1||!pRoot2)
            return false;
        return _HasSubtree(pRoot1,pRoot2)||HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
    }
};

2、二叉树的下一个节点
就是分情况
有右孩子，则中序的下一个节点为右子树的最左，这样就是找左
无右孩子，那就是找父亲节点为祖父的左孩子，
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        if(!pNode)
            return nullptr;
        if(pNode->right)
        {
            //右不为空就是找最左节点
            TreeLinkNode* cur=pNode->right;
            while(cur->left)
            {
                cur=cur->left;
            }
            return cur;
        }
        else
        {
            while(pNode->next)
            {
                if(pNode->next->left==pNode)
                    return pNode->next;
                pNode=pNode->next;
            }
        }
        return nullptr;
    }
};

3、